// pages/play/play.js
let playerId = -1; // 音乐播放ID
let musiclist = []; // 音乐列表
let music = {}; // 播放音乐的信息
let nowPlayerIndex = 0; // 播放音乐在列表中的索引值
const backgroundAudioManager = wx.getBackgroundAudioManager();
const app = getApp();
Page({

  /**
   * 页面的初始数据
   */
  data: {
    picUrl: "",
    isPlaying: true,
    isSame: false, // 表示是否为同一首歌
    currentTime: 0,
    isLyricShow: false,
    lyric: ""
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function(options) {
    // console.log(options);
    playerId = options.musicId;
    nowPlayerIndex = options.index;

    this._getMusicDetail();
  },

  // 保存播放历史
  savePlayHistory() {
    // 当前播放的歌曲
    const music = musiclist[nowPlayerIndex];
    const openid = app.globalData.openid;
    // 获取本地存储的最近播放
    let history = wx.getStorageSync(openid);
    // 设置一个布尔值
    let bHave = false;
    for (let i = 0; i < history.length; i++) {
      if (history[i].id == music.id) {
        bHave = true;
        break;
      }
    }

    if (!bHave) {
      history.unshift(music);
      wx.setStorageSync(openid, history)
    }

  },

  // 切换显示歌词
  toggleLyric() {
    this.setData({
      isLyricShow: !this.data.isLyricShow
    });
  },

  // 音乐播放时间更新
  timeUpdate(e) {
    const currentTime = e.detail.currentTime;
    this.selectComponent(".lyric").update(currentTime);
    // this.setData({
    //   currentTime
    // })
  },

  // 获得音乐播放地址
  _getMusicUrl(musicId) {
    if (musicId == app.getPlayMusicId()) {
      this.setData({
        isSame: true
      })
    } else {
      this.setData({
        isSame: false
      })
    }
    if (!this.data.isSame) { // 不是同一首歌
      backgroundAudioManager.stop();
    }

    wx.showLoading({
      title: '歌曲加载中',
    });

    this.setData({
      isPlaying: false
    });

    wx.cloud.callFunction({
      name: "newMusic",
      data: {
        musicId,
        $url: "musicUrl"
      }
    }).then((res) => {
      const result = res.result;
      if (result.data[0].url == null) {
        wx.showToast({
          title: "无权限播放",
        });
        return;
      }
      // console.log(res);
      if (!this.data.isSame) {
        backgroundAudioManager.title = music.name; // 必须设置title才可以播放
        backgroundAudioManager.epname = music.al.name;
        backgroundAudioManager.singer = music.ar[0].name;
        backgroundAudioManager.coverImgUrl = this.data.picUrl;
        backgroundAudioManager.src = result.data[0].url;
        this.setData({
          isPlaying: true
        });
        wx.hideLoading();
        // 写入全局中(设置播放歌曲id)
        app.setPlayMusicId(musicId);
        // 保存播放历史
        this.savePlayHistory();

        this._getLyric(musicId);
      }
    })
  },

  // 加载歌词
  _getLyric(musicId) {
    wx.cloud.callFunction({
      name: "newMusic",
      data: {
        musicId,
        $url: "lyrci"
      }
    }).then((res) => {
      let lyric = "暂无歌词";
      const lrc = JSON.parse(res.result).lrc;
      if (lrc) {
        lyric = lrc.lyric;
      }
      this.setData({
        lyric
      });

    });
  },

  // 获取当前音乐详情
  _getMusicDetail() {
    // 从本地存储获取音乐列表
    musiclist = wx.getStorageSync("musiclist");
    music = musiclist[nowPlayerIndex];
    this.setData({
      picUrl: music.al.picUrl
    });
    playerId = music.id;

    // 动态设置当前页面的标题
    wx.setNavigationBarTitle({
      title: music.al.name
    });
    // 获得音乐播放地址
    this._getMusicUrl(playerId);
  },

  // 切换播放状态
  togglePlaying() {
    this.setData({
      isPlaying: !this.data.isPlaying
    });
    this.data.isPlaying ? backgroundAudioManager.play() : backgroundAudioManager.pause();
  },

  // 上一首
  onPrev() {
    let len = musiclist.length;
    nowPlayerIndex--;
    if (nowPlayerIndex < 0) {
      nowPlayerIndex = len - 1;
    }
    this._getMusicDetail();
  },
  // 下一首
  onNext() {
    let len = musiclist.length;
    nowPlayerIndex++;
    if (nowPlayerIndex == len) {
      nowPlayerIndex = 0;
    }
    this._getMusicDetail();
  },

  // 音乐播放事件
  onPlay() {
    this.setData({
      isPlaying: true
    });
  },

  // 音乐暂停事件
  onPause() {
    this.setData({
      isPlaying: false
    });
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function() {

  }
})